/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package com.isd.pool.rn;

import com.isd.global.excepciones.ExcepcionGeneralSistema;
import com.isd.global.excepciones.PreexistingEntityException;
import com.isd.global.excepciones.RollbackFailureException;
import com.isd.pool.dao.PoolDAO;
import com.isd.pool.modelo.BasesCondicionesAdicionales;
import com.isd.pool.modelo.CondicionesPagoPool;
import com.isd.pool.modelo.EstadoReserva;
import com.isd.pool.modelo.ItemProductoPool;
import com.isd.pool.modelo.Pool;
import com.isd.pool.modelo.ReservasPool;
import com.isd.pool.modelo.ReservasPoolPK;
import com.isd.venta.modelo.Cliente;
import java.math.BigDecimal;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;

/**
 *
 * @author Claudio
 */
@Stateless
public class PoolRN {

    @EJB private PoolDAO poolDAO;

    public void guardar(Pool pool) throws PreexistingEntityException, RollbackFailureException, Exception{

        if(poolDAO.getObjeto(Pool.class, pool.getNroPool())==null){
            poolDAO.crear(pool);
        }else{
            poolDAO.editar(pool);
        }
    }

    public Pool getPool(Integer id){        
        return poolDAO.getObjeto(Pool.class, id );
    }
    
    /**     * 
     * @param codigoAcceso
     * @return Retorna una instancia de pool de acuerdo al código de accceso.
     */
    public Pool getPool(String codigoAcceso){        
        return poolDAO.getPool(codigoAcceso);
    }

    public Pool refresh(Pool pool){
        return poolDAO.refresh(pool);
    }
    
    public BigDecimal getCantidadReservadaByPool(Integer idPool, String estado){
        
        return poolDAO.getCantidadReservadaByPool(idPool, estado);                      
    }
    
    public BigDecimal getCantidadReservadaByItemProductoPool(ItemProductoPool itemProducto){
        
        return poolDAO.getCantidadReservadaByItemProductoPool(itemProducto.getNroPool(),EstadoReserva.Confirmado, itemProducto.getProducto().getTippro(), itemProducto.getProducto().getArtcod());
    }
    
    public int getCantidadPickingByItemProductoPool(ItemProductoPool itemProducto){
        
        return poolDAO.getCantidadPickingByItemProductoPool(itemProducto.getNroPool(),itemProducto.getProducto().getTippro(), itemProducto.getProducto().getArtcod());
    }

    public void guardarReservar(ReservasPool r) throws ExcepcionGeneralSistema, PreexistingEntityException, RollbackFailureException, Exception{

        ReservasPoolPK idPK = new ReservasPoolPK(r.getNroPool(),r.getOrden(),r.getNroCuenta());

        if(poolDAO.getObjeto(ReservasPool.class, idPK)==null){
            poolDAO.crear(r);
        }else{
            poolDAO.editar(r);
        }
    }

    public List<Pool> getVentasPublicasVisibles(){

        return poolDAO.getVentasPublicasVisibles();
    }

    public List<Pool> getVentasRestringidasVisibles(){

        return poolDAO.getVentasRestringidasVisibles();    
    }

    public List<Pool> getVentasParaCerrar(){

        return poolDAO.getVentasParaCerrar();
    }

    public List<Pool> getLista(){

        return poolDAO.getLista();
    }

    public List<ReservasPool> getReservasPorCliente(Cliente cliente, String estado) {

        return poolDAO.getReservasPorCliente(cliente,estado);
    }

    public Integer getNumeroMaximoPool() {

        return poolDAO.getNumeroMaximoPool();
    }

    public void eliminarCondicionPago(CondicionesPagoPool item) {
        poolDAO.eliminarCondicionPago(item);
    }

    public void eliminarItemProducto(ItemProductoPool item) {

        poolDAO.eliminarItemProducto(item);
    }

    public void eliminarBaseCondicionesAdicionales(BasesCondicionesAdicionales item) {

        poolDAO.eliminarBaseCondicionesAdicionales(item);
    }

    public List<Pool> getPoolByDescripcion(String query) {
        return poolDAO.getPoolByDescripcion(query);
    }
 
}
